package com.itheima.user.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.itheima.article.feign.ApAuthorFeign;
import com.itheima.article.pojo.ApAuthor;
import com.itheima.common.constants.BusinessConstants;
import com.itheima.common.pojo.Result;
import com.itheima.media.feign.WmUserFeign;
import com.itheima.media.pojo.WmUser;
import com.itheima.user.mapper.ApUserMapper;
import com.itheima.user.mapper.ApUserRealnameMapper;
import com.itheima.user.pojo.ApUser;
import com.itheima.user.pojo.ApUserRealname;
import com.itheima.user.service.ApUserRealnameService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.awt.image.RescaleOp;
import java.time.LocalDateTime;
import java.util.Date;

/**
 * <p>
 * APP实名认证信息表 服务实现类
 * </p>
 *
 * @author ljh
 * @since 2021-11-28
 */
@Service
public class ApUserRealnameServiceImpl extends ServiceImpl<ApUserRealnameMapper, ApUserRealname> implements ApUserRealnameService {

    @Autowired
    private WmUserFeign wmUserFeign;

    @Autowired
    private  ApUserRealnameMapper apUserRealnameMapper;

    @Autowired
    private ApUserMapper apUserMapper;

    @Autowired
    private ApAuthorFeign apAuthorFeign;



    //14 tian
    @Override
    @Transactional(rollbackFor = Exception.class)//spring 声明式事务（本地事务范围 以后要用分布式事务来解决问题）
    public void pass(Integer id) {
        //update xxx set stauts=9 where id=?

        ApUserRealname entity = new ApUserRealname();
        // where id=?
        entity.setId(id);
        // set status=9
        entity.setStatus(BusinessConstants.ApUserRealnameConstants.SHENHE_SUCCESS);
        //1.更新状态值
        apUserRealnameMapper.updateById(entity);


        //low 你们改造下优化下
        /**
         * SELECT
         * 	apu.*
         * FROM
         * 	ap_user apu
         * LEFT JOIN ap_user_realname apur ON apur.user_id = apu.id
         * WHERE
         * 	apur.id = 5
         */

        ApUser apUser = apUserMapper.selectById(apUserRealnameMapper.selectById(id).getUserId());

        //2.todo  创建自媒体账号  通过feign远程调用 创建自媒体账号
            //1.需要在 自媒体对应的api工程中声明feign接口
            //2.需要 在自媒体微服务 写一个controller "实现feign接口"
            //3.需要在user微服务中 依赖坐标
            //4.需要在user微服务中开启feignlcients
            //5.注入 使用

        //判断如果没有创建自媒体账号，则创建，如果有了就不需要再创建了

        WmUser wmUser = wmUserFeign.getByApUserId(apUser.getId());

        if(wmUser==null) {

            wmUser = new WmUser();//构造数据给他保存
            BeanUtils.copyProperties(apUser, wmUser);
            wmUser.setStatus(BusinessConstants.WmUserConstants.WM_USER_OK);
            //设置APP用户的ID
            wmUser.setApUserId(apUser.getId());
            //设置创建时间
            wmUser.setCreatedTime(LocalDateTime.now());

            Result<WmUser> save = wmUserFeign.save(wmUser);//save完成之后 返回的Wmuser的对象的ID的值
            wmUser = save.getData();
        }




        //3.todo  创建作者账号 通过feign远程调用 创建创建作者账号

        //3.1 先获取是否有作者账号
        ApAuthor apAuthor = apAuthorFeign.getByApUserId(apUser.getId());
        if(apAuthor==null) {
            //3.2 如果没有作者账号，则进行添加（远程调用）
            apAuthor = new ApAuthor();
            apAuthor.setType(2);//常量
            apAuthor.setCreatedTime(LocalDateTime.now());
            apAuthor.setName(apUser.getName());//名称
            apAuthor.setUserId(apUser.getId());//用户的ID
            apAuthor.setWmUserId(wmUser.getId());//是保存完成之后主键返回出来的数据
            apAuthorFeign.save(apAuthor);
        }

    }

    @Override
    public void reject(Integer id, String reason) {
        ApUserRealname entity = new ApUserRealname();
        // where id=?
        entity.setId(id);
        // set status=2
        entity.setStatus(BusinessConstants.ApUserRealnameConstants.SHENHE_FAIL);
        entity.setReason(reason);
        apUserRealnameMapper.updateById(entity);
    }
}
